#pragma once;
#include "feDefs.h"
#include "feMatrix.h"

class feVector;
class feDenseMatrix;

class feMvOps
{
public:
	inline static void MultMV(feMatrix *iM, feVector *iV, feVector *oV) { iM->MultMv(iV, oV); }
	inline static void MultMAlpha(feMatrix *ioM, double iAlpha) { ioM->MultMAlpha(iAlpha); }
	inline static void AddLocalToGlobalM(feMatrix *ioG, feDenseMatrix *iM, int *iMRemap, double iMultCoeff) { ioG->AddLocalToGlobal(iM, iMRemap, iMultCoeff); } 
	inline static void MultSubVV(feVector *iFrom, feVector *iWhat, feVector *oRes, double iAlpha = 1);
	
	static void MultVAlpha(feVector *iV, double iAlpha, feVector *oV);
	static void MultAddVV(feVector *iV1, feVector *iV2, feVector *oV, double iAlpha = 1);
	static void DivideVV(feVector *iWhat, feVector *iTo, feVector *oRes);
	static void CopyVV(feVector *iFrom, feVector *iTo);
	static double DotVV(feVector *iV1, feVector *iV2);
	static bool AddLocalToGlobalV(feVector *ioG, feVector *iF, int* iFRemap, double iCoeff = 1);
	static bool PickLocalFromGlobalV(feVector *iG, feVector *oF, int *iIndeces);
};